"""___字典___"""
dict1 = {"name":"zhangsan","age":18,"sex":"男"}
print(dict1['name'])

#声明空字典
emptyDict = {}

#使用dict()创建字典 ,参数为一个序列
dict2 = dict((('name','lisi'),('age',20),('sex','man')))
print(dict2)

#通过具有映射关系的参数创建字典, 注意：key 键上不能加引号   ‘name’ = ‘王五’是不行的
dict3 = dict(name='wangwu',age = 40,sex = 'man')
print(dict3)

#直接给字典的键赋值，如果键存在则改写对应键的值，如果不存在，则创建一个新的键并赋值
dict3['address'] = '北京市海淀区'
dict3['age'] = 30
print(dict3)

"""___字典内置方法___"""
#创建并返回一个新的字典，有两个参数：1、字典的键，2、参数（可选）不提供默认为None
print(emptyDict.fromkeys({1,2,3}))  #{1: None, 2: None, 3: None}
print(emptyDict.fromkeys({1,2,3},'Number'))  #{1: 'Number', 2: 'Number', 3: 'Number'}
print(emptyDict.fromkeys({1,2,3},{'one','two','three'})) # {1: {'two', 'three', 'one'}, 2: {'two', 'three', 'one'}, 3: {'two', 'three', 'one'}}

print(dict3.keys())  #dict_keys(['name', 'age', 'sex', 'address'])
print(dict3.values()) #dict_values(['wangwu', 30, 'man', '北京市海淀区'])
print(dict3.items())  #dict_items([('name', 'wangwu'), ('age', 30), ('sex', 'man'), ('address', '北京市海淀区')])
for key in dict3.keys():
    print(key)
for item in dict3.items():
    print(item)

# 不存在键时会报错
# print(dict3[4])

#get() 当键不存在时，get()方法并不会报错，会返回一个None
print(dict3.get(4))  # None
#如果找不到数据，希望返回指定的值，则可以在第二个参数设置默认返回值
print(dict3.get(4,'没有'))  # 没有
#判断键是否存在字典中，可用成员资格操作符 in/ not in 来判断，比序列更高效（字典通过哈希的方法一对一找到键）
print(4 in dict3)  #False
print(4 not in dict3)  # True
#清空字典
# dict3.clear()
# print(dict3)
#复制字典
dict4 = dict3.copy()
dict4['age'] = '50'
print(id(dict3))
print(id(dict4))
print(dict4)
#pop() \ popitem()
print(dict4.pop('age'))  #50
print(dict4)   # {'name': 'wangwu', 'sex': 'man', 'address': '北京市海淀区'}
print(dict4.popitem())  # ('address', '北京市海淀区')
print(dict4)   #{'name': 'wangwu', 'sex': 'man'}
#setdefault() 类似get(),但找不到相应的键会自动添加
print(dict4.setdefault('name'))  # wangwu
print(dict4.setdefault('1')) # None
print(dict4) # {'name': 'wangwu', 'sex': 'man', '1': None}
# update() 更新字典
dict4.update({'1':"one"})
print(dict4)
#参数收集方式  **
def params(**param):
    print("有%d个参数" % len(param))
    print("它们分别是：",param)
a = {'1':'one','2':'two','3':'three'}
params(**a)
#输出  有3个参数
# 它们分别是： (1, 2, 3)

def foo_1(**param):
    print("参数：",param)
foo_1(a='1',b=2,c=3) # 参数： {'a': '1', 'b': 2, 'c': 3}

#集合 Set
#创建集合
set1 = {1,2,3,4}
print(type(set1))  # <class 'set'>
set2 = set(["one","two","three"])
print(set2)   #{'two', 'one', 'three'}
set3 = {"one","two","three"}
print(set2 == set3)  #True
#访问集合 可以用迭代遍历集合中的数据，或者用 in / not in 判断一个元素是否在集合中存在
#使用add() 方法可以为集合添加元素，使用remove 方法可以删除集合中已知的元素
set1.add(5)
set1.add(6)
print(set1)
set1.remove(5)
print(set1)
#不可变集合 frozenset()
set4 = frozenset({1,2,3,4,5})
print(set4)  #frozenset({1, 2, 3, 4, 5})
for each in set4:
    print(each)
#没有add方法
# set4.add(6)
# print(set4)



